iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
生成式 AI

從零開始的生成式 AI 開發之路:Spring AI 的實戰指南系列 第 5

第5天:提交基本提示(Prompts)

  • 分享至 

  • xImage
  •  

今天,我們將深入了解提示(Prompt)和響應的機制,並學習如何使用ChatClient提交基本提示,以及如何處理AI模型的響應。

理解提示和響應的機制

在生成式AI中,**提示(Prompt)**是引導AI模型生成所需輸出的關鍵。提示可以是問題、指令或任何形式的文本,旨在告訴模型您希望它產生什麼樣的響應。

AI模型根據這些提示生成響應(Response)。這個過程可以視為一種對話,其中您提供輸入,模型給出回應。理解這種機制有助於我們更有效地與AI模型互動,從而獲得更準確或更有創造性的結果。

使用ChatClient提交提示的代碼示例

ChatClient是Spring AI提供的一個流暢API,用於與AI模型通信。它支持同步和反應式兩種編程模型。我們可以使用ChatClient構建並提交提示,然後接收模型的響應。

創建ChatClient

首先,我們需要創建一個ChatClient實例。有兩種方式:

  1. 使用自動配置的ChatClient.Builder
@RestController
class MyController {

    private final ChatClient chatClient;

    public MyController(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
    }

    @GetMapping("/ai")
    String generation(String userInput) {
        return this.chatClient.prompt()
            .user(userInput)
            .call()
            .content();
    }
}
  1. 程序化創建ChatClient

如果您需要使用多個聊天模型,可以禁用自動配置,並為每個ChatModel程序化地創建一個ChatClient.Builder實例:

ChatModel myChatModel = ... // 通常是通過@Autowired注入

ChatClient.Builder builder = ChatClient.builder(myChatModel);

// 或者使用默認設置創建ChatClient:
ChatClient chatClient = ChatClient.create(myChatModel);

提交提示並接收響應

以下是如何使用ChatClient提交一個簡單的提示並獲取模型的響應:

String answer = chatClient.prompt()
    .user("請告訴我一個笑話")
    .call()
    .content();

System.out.println("AI模型的回應:" + answer);

在這個示例中:

  • prompt():開始構建提示。
  • user("請告訴我一個笑話"):設置用戶消息,即我們的提示。
  • call():提交提示給AI模型。
  • content():獲取AI模型返回的文本內容。

處理AI模型的響應

ChatClient提供了多種方式來處理AI模型的響應:

獲取完整的ChatResponse對象

如果您需要訪問更詳細的響應信息,例如元數據或多個生成結果,可以使用chatResponse()方法:

ChatResponse chatResponse = chatClient.prompt()
    .user("請告訴我一個笑話")
    .call()
    .chatResponse();

將響應映射到實體類

您可以將AI模型的輸出直接映射到一個Java實體類。例如:

record Joke(String setup, String punchline) {}

Joke joke = chatClient.prompt()
    .user("請給我講一個笑話,並以JSON格式返回,包含'setup'和'punchline'字段。")
    .call()
    .entity(Joke.class);

System.out.println("笑話開頭:" + joke.setup());
System.out.println("笑話結尾:" + joke.punchline());

流式處理響應

如果您希望以反應式方式處理模型的輸出,可以使用stream()方法:

Flux<String> output = chatClient.prompt()
    .user("請逐字逐句地告訴我一個笑話")
    .stream()
    .content();

output.subscribe(System.out::println);

使用默認設置簡化提示提交

您可以在ChatClient的構建過程中設置默認的系統消息或其他選項,以簡化後續的提示提交。例如,設置默認的系統消息使模型以特定風格回應:

ChatClient chatClient = ChatClient.builder(chatModel)
    .defaultSystem("你是一個會用海盜口吻講話的友好聊天機器人")
    .build();

String response = chatClient.prompt()
    .user("今天天氣怎麼樣?")
    .call()
    .content();

System.out.println(response);

模型可能會回應:

嗨,夥計!今天天氣晴朗,適合揚帆出海!

上一篇
建立 Spring AI 專案
下一篇
第6天:實踐基本示例
系列文
從零開始的生成式 AI 開發之路:Spring AI 的實戰指南6
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言